package util;

import DAO.NodeList;
import DAO.TreeNode;
import javafx.scene.control.*;
import javafx.scene.layout.AnchorPane;
import javafx.scene.text.TextAlignment;

/**
 *树状结构图
 */
public class MyTreeView extends TreeView<Label> {

    public static AnchorPane ap = new AnchorPane();

    public MyTreeView(){
        ap.setLayoutX(10);
        setTreeView();
    }

    /*设置并初始化TreeView，将节点数据加载到TreeView中进行显示*/
    public static void setTreeView() {
        // 创建一个TreeView，并指定其元素类型为Label
        TreeView<Label> treeview = new TreeView<Label>();

        // 从NodeList获取根节点，创建对应的Label，并以此创建TreeView的根节点
        TreeNode node = NodeList.getRoot();
        Label label = new Label(node.getText());
        TreeItem<Label> root = new TreeItem<Label>(label);
        treeview.setRoot(root); // 设置TreeView的根节点

        // 遍历节点树，将子节点添加到TreeView中
        walk(root, node);

        // 如果NodeList中的节点列表为空，将TreeView的根节点设为null
        if (NodeList.list.isEmpty()) {
            root = null;
            treeview.setRoot(root);
        }

        // 为Label设置Tooltip，显示节点的完整文本
        Tooltip tooltip = new Tooltip(node.getText());
        Tooltip.install(label, tooltip);

        // 设置TreeView的首选宽度和最小高度
        treeview.setPrefWidth(275);
        treeview.setMinHeight(600);

        // 将TreeView添加到应用界面的组件列表中
        ap.getChildren().add(treeview);
    }

    // 遍历节点的子节点
    public static void walk(TreeItem<Label> root,TreeNode node) {
        for(int i=0;i<node.getNodeChildren().size();i++) {
            TreeNode childnode=node.getNodeChildren().get(i);

            Label label = new Label(childnode.getTex());
            Tooltip tooltip = new Tooltip(childnode.getText());

            Tooltip.install(label, tooltip);
            TreeItem<Label> child = new TreeItem<Label>(label);
            root.getChildren().add(child);

            root.setExpanded(true);   // 初始化为展开显示
            walk(child,childnode);  // 继续往子节点遍历
        }
    }
}
